Messaging is a method of communication between software components or applications. A messaging system may be a peer-to-peer facility wherein a messaging client sends messages to, and receives messages from, any other client. In other embodiments, the messaging system may be server based wherein a server process brokers messages between client applications.
Messaging enables distributed communication that is loosely coupled. A sender may send a message to a destination, and a receiver can retrieve the message from the destination. However, the sender and the receiver need not be available at the same time in order to communicate. In certain scenarios, the sender need not know anything about the receiver and, likewise, the receiver need to know anything about the sender. However, the sender and the receiver may need to know what format the message is in and what destination should be used. In this respect, messaging differs from tightly coupled technologies, such as Remote Method Invocation (RMI), which require an application to know a remote application's methods.
Messaging also differs from electronic mail (e-mail), which is a method of communication between people or between software applications and people.
Prior art messaging systems, however, typically provide two distinct and independent messaging paradigms: publish-subscribe and queuing. Sun's Java Messaging Service (JMS) is an example of a widely used API specification used in messaging systems (see URL address java.sun.com/products/jms/docs.html for exemplary JMS specifications). An exemplary implementation of the JMS specification is the TIBCO Enterprise™ for JMS messaging system.